/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package juegocartas.mus;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author JuanFran Jara Bellid
 */
public class GrupoCartas {
    
    public static final String ORO = "oros";
    public static final String COPAS = "copas";
    public static final String ESPADA = "espadas";
    public static final String BASTOS = "bastos";

    private List<Carta> listaCartas;

    public GrupoCartas() {
        listaCartas = new ArrayList<Carta>();
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        for (Carta carta : listaCartas) {
            if (!builder.toString().isEmpty()) {
                builder.append(", ");
            }
            builder.append(carta);
        }
        return builder.toString();
    }

    public List<Carta> getCartas() {
        return listaCartas;
    }

    public void setGrupoCartas(List<Carta> grupoCartas) {
        this.listaCartas = grupoCartas;
    }

    public void añadirCarta(Carta carta) {
        listaCartas.add(carta);
    }


    public void añadirCartas(List<Carta> cartas) {
        listaCartas.addAll(cartas);
    }

    public void barajar() {
        Collections.shuffle(listaCartas);
    }

    public Carta cogerCartaSuperior() {
        if (listaCartas.isEmpty()) {
            return null;
        }
        Carta carta = listaCartas.get(0);
        listaCartas.remove(0);
        return carta;
    }

    public void mostrarCartas() {
        for (Carta carta : listaCartas) {
            System.out.println(carta.getNumero() + " de " + carta.getPalo());
        }
    }
    
    public static GrupoCartas crearBarajaEspanola() {        
        GrupoCartas grupoCartas = new GrupoCartas();
        Carta unoOro = new Carta(1, ORO);
        Carta dosOro = new Carta(2, ORO);
        Carta tresOro = new Carta(3,ORO);
        Carta cuatroOro = new Carta(4, ORO);
        Carta cincoOro = new Carta(5, ORO);
        Carta seisOro = new Carta(6, ORO);
        Carta sieteOro = new Carta(7, ORO);
        Carta sotaOro = new Carta(10, ORO);
        Carta caballoOro = new Carta(11, ORO);
        Carta reyOro = new Carta(12, ORO);
        grupoCartas.añadirCarta(unoOro);
        grupoCartas.añadirCarta(dosOro);
        grupoCartas.añadirCarta(tresOro);
        grupoCartas.añadirCarta(cuatroOro);
        grupoCartas.añadirCarta(cincoOro);
        grupoCartas.añadirCarta(seisOro);
        grupoCartas.añadirCarta(sieteOro);
        grupoCartas.añadirCarta(sotaOro);
        grupoCartas.añadirCarta(caballoOro);
        grupoCartas.añadirCarta(reyOro);
        Carta unoCopa = new Carta(1, COPAS);
        Carta dosCopa = new Carta(2, COPAS);
        Carta tresCopa = new Carta(3,COPAS);
        Carta cuatroCopa = new Carta(4, COPAS);
        Carta cincoCopa = new Carta(5, COPAS);
        Carta seisCopa = new Carta(6, COPAS);
        Carta sieteCopa = new Carta(7, COPAS);
        Carta sotaCopa = new Carta(10, COPAS);
        Carta caballoCopa = new Carta(11, COPAS);
        Carta reyCopa = new Carta(12, COPAS);
        grupoCartas.añadirCarta(unoCopa);
        grupoCartas.añadirCarta(dosCopa);
        grupoCartas.añadirCarta(tresCopa);
        grupoCartas.añadirCarta(cuatroCopa);
        grupoCartas.añadirCarta(cincoCopa);
        grupoCartas.añadirCarta(seisCopa);
        grupoCartas.añadirCarta(sieteCopa);
        grupoCartas.añadirCarta(sotaCopa);
        grupoCartas.añadirCarta(caballoCopa);
        grupoCartas.añadirCarta(reyCopa);
        Carta unoBastos = new Carta(1, BASTOS);
        Carta dosBastos = new Carta(2, BASTOS);
        Carta tresBastos = new Carta(3,BASTOS);
        Carta cuatroBastos = new Carta(4, BASTOS);
        Carta cincoBastos = new Carta(5, BASTOS);
        Carta seisBastos = new Carta(6, BASTOS);
        Carta sieteBastos = new Carta(7, BASTOS);
        Carta sotaBastos = new Carta(10, BASTOS);
        Carta caballoBastos = new Carta(11, BASTOS);
        Carta reyBastos = new Carta(12, BASTOS);
        grupoCartas.añadirCarta(unoBastos);
        grupoCartas.añadirCarta(dosBastos);
        grupoCartas.añadirCarta(tresBastos);
        grupoCartas.añadirCarta(cuatroBastos);
        grupoCartas.añadirCarta(cincoBastos);
        grupoCartas.añadirCarta(seisBastos);
        grupoCartas.añadirCarta(sieteBastos);
        grupoCartas.añadirCarta(sotaBastos);
        grupoCartas.añadirCarta(caballoBastos);
        grupoCartas.añadirCarta(reyBastos);
        Carta unoEspadas = new Carta(1, ESPADA);
        Carta dosEspadas = new Carta(2, ESPADA);
        Carta tresEspadas = new Carta(3,ESPADA);
        Carta cuatroEspadas = new Carta(4, ESPADA);
        Carta cincoEspadas = new Carta(5, ESPADA);
        Carta seisEspadas = new Carta(6, ESPADA);
        Carta sieteEspadas = new Carta(7, ESPADA);
        Carta sotaEspadas = new Carta(10, ESPADA);
        Carta caballoEspadas = new Carta(11, ESPADA);
        Carta reyEspadas = new Carta(12, ESPADA);
        grupoCartas.añadirCarta(unoEspadas);
        grupoCartas.añadirCarta(dosEspadas);
        grupoCartas.añadirCarta(tresEspadas);
        grupoCartas.añadirCarta(cuatroEspadas);
        grupoCartas.añadirCarta(cincoEspadas);
        grupoCartas.añadirCarta(seisEspadas);
        grupoCartas.añadirCarta(sieteEspadas);
        grupoCartas.añadirCarta(sotaEspadas);
        grupoCartas.añadirCarta(caballoEspadas);
        grupoCartas.añadirCarta(reyEspadas);
        return grupoCartas;
    }

    public int getNumeroCartas() {
        return listaCartas.size();
    }

    public List<Carta> getCartasOrdenadas() {
        List<Carta> cartasOrdenadas = new ArrayList<Carta>();
        for (Carta carta : listaCartas) {
            boolean introducida = false;
            for (int i = 0; i < cartasOrdenadas.size() && !introducida; i++) {
                Carta cartaOrdenada = cartasOrdenadas.get(i);
                if (UtilidadesMus.getValorCarta(carta) >= UtilidadesMus.getValorCarta(cartaOrdenada)) {
                    cartasOrdenadas.add(i, carta);
                    introducida = true;
                }
            }
            if (!introducida) {
                cartasOrdenadas.add(carta);
            }
        }
        return cartasOrdenadas;
    }

    public void limpiar() {
        listaCartas = new ArrayList<Carta>();
    }

}
